home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-15 | 68.3 KB | 1,470 lines |
-
- MDOC.SAMPLES(7) UNIX Reference Manual MDOC.SAMPLES(7)
-
- NNAAMMEE
- mmddoocc..ssaammpplleess - tutorial sampler for writing BSD UNIX manuals with --mmddoocc
-
- SSYYNNOOPPSSIISS
- mmaann mmddoocc..ssaammpplleess
-
- DDEESSCCRRIIPPTTIIOONN
- A tutorial sampler for writing BSD UNIX manual pages with the --mmddoocc macro
- package, a _c_o_n_t_e_n_t-based and _d_o_m_a_i_n-based formatting package for
- troff(1). Its predecessor, the -man(7) package, addressed page layout
- leaving the manipulation of fonts and other typesetting details to the
- individual author. In --mmddoocc, page layout macros make up the _p_a_g_e
- _s_t_r_u_c_t_u_r_e _d_o_m_a_i_n which consists of macros for titles, section headers,
- displays and lists. Essentially items which affect the physical position
- of text on a formatted page. In addition to the page structure domain,
- there are two more domains, the manual domain and the general text do-
- main. The general text domain is defined as macros which perform tasks
- such as quoting or emphasizing pieces of text. The manual domain is de-
- fined as macros that are a subset of the day to day informal language
- used to describe commands, routines and related BSD UNIX files. Macros
- in the manual domain handle command names, command line arguments and op-
- tions, function names, function parameters, pathnames, variables, cross
- references to other manual pages, and so on. These domain items have
- value for both the author and the future user of the manual page. It is
- hoped the consistency gained across the manual set will provide easier
- translation to future documentation tools.
-
- Throughout the UNIX manual pages, a manual entry is simply referred to as
- a man page, regardless of actual length and without sexist intention.
-
- GGEETTTTIINNGG SSTTAARRTTEEDD
- Since a tutorial document is normally read when a person desires to use
- the material immediately, the assumption has been made that the user of
- this document may be impatient. The material presented in the remained
- of this document is outlined as follows:
-
- 1. TROFF IDIOSYNCRASIES
- Macro Usage.
- Passing Space Characters in an Argument.
- Trailing Blank Space Characters (a warning).
- Escaping Special Characters.
-
- 2. THE ANATOMY OF A MAN PAGE
- A manual page template.
-
- 3. INTRODUCTION OF TITLE MACROS.
-
- 4. INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS.
- What's in a name....
- General Syntax.
-
- 5. MANUAL DOMAIN
- Addresses.
- Arguments.
- Configuration Declarations (section four only).
- Command Modifier .
- Defined Variables.
- Errno's (Section two only).
- Environment Variables.
- Function Argument.
-
-
- Function Declaration.
- Flags.
- Functions (library routines).
- Function Types.
- Interactive Commands.
- Literals.
- Names.
- Options.
- Pathnames.
- Variables.
- Cross References.
-
- 6. GENERAL TEXT DOMAIN
- AT&T Macro.
- BSD Macro.
- UNIX Macro.
- Emphasis Macro.
- Enclosure/Quoting Macros
- Angle Bracket Quote/Enclosure.
- Bracket Quotes/Enclosure.
- Double Quote macro/Enclosure.
- Parenthesis Quote/Enclosure.
- Single Quotes/Enclosure.
- Prefix Macro.
- Extended Arguments.
- No-Op or Normal Text Macro.
- No Space Macro.
- Section Cross References.
- Symbolic Macro.
- References and Citations.
- Trade Names (Acronyms and Type Names).
-
- 7. PAGE STRUCTURE DOMAIN
- Section Headers.
- Paragraphs and Line Spacing.
- Keeps.
- Displays.
- Lists and Columns.
-
- 8. PREDEFINED STRINGS
-
- 9. DIAGNOSTICS
-
- 10. FORMATTING WITH GROFF, TROFF AND NROFF
-
- 11. BUGS
-
- TTRROOFFFF IIDDIIOOSSYYNNCCRRAASSIIEESS
- The --mmddoocc package attempts to simplify the process of writing a man page.
- Theoretically, one should not have to learn the dirty details of troff(1)
- to use --mmddoocc; however, there are a few limitations which are unavoidable
- and best gotten out of the way. And, too, be forewarned, this package is
- _n_o_t fast.
-
- MMaaccrroo UUssaaggee
- As in troff(1), a macro is called by placing a `.' (dot character) at
- the beginning of a line followed by the two character name for the macro.
- Arguments may follow the macro separated by spaces. It is the dot char-
- acter at the beginning of the line which causes troff(1) to interpret the
- next two characters as a macro name. To place a `.' (dot character) at
- the beginning of a line in some context other than a macro invocation,
- precede the `.' (dot) with the `\&' escape sequence. The `\&' translates
- literally to a zero width space, and is never displayed in the output.
-
- In general, troff(1) macros accept up to nine arguments, any extra argu-
- ments are ignored. Most macros in --mmddoocc accept nine arguments and, in
- limited cases, arguments may be continued or extended on the next line
- (See _E_x_t_e_n_s_i_o_n_s). A few macros handle quoted arguments (see _P_a_s_s_i_n_g _S_p_a_c_e
- _C_h_a_r_a_c_t_e_r_s _i_n _a_n _A_r_g_u_m_e_n_t below).
-
- Most of the --mmddoocc general text domain and manual domain macros are spe-
- cial in that their argument lists are _p_a_r_s_e_d for callable macro names.
- This means an argument on the argument list which matches a general text
- or manual domain macro name and is determined to be callable will be exe-
- cuted or called when it is processed. In this case the argument, al-
- though the name of a macro, is not preceded by a `.' (dot). It is in
- this manner that many macros are nested; for example the option macro,
- `.Op', may _c_a_l_l the flag and argument macros, `Fl' and `Ar', to specify
- an optional flag with an argument:
-
- [--ss _b_y_t_e_s] is produced by .Op Fl s Ar bytes
-
- To prevent a two character string from being interpreted as a macro name,
- precede the string with the escape sequence `\&':
-
- [Fl s Ar bytes] is produced by .Op \&Fl s \&Ar bytes
-
- Here the strings `Fl' and `Ar' are not interpreted as macros. Macros
- whose argument lists are parsed for callable arguments are referred to as
- parsed and macros which may be called from an argument list are referred
- to as callable throughout this document and in the companion quick refer-
- ence manual mdoc(7). This is a technical _f_a_u_x _p_a_s as almost all of the
- macros in --mmddoocc are parsed, but as it was cumbersome to constantly refer
- to macros as being callable and being able to call other macros, the term
- parsed has been used.
-
- PPaassssiinngg SSppaaccee CChhaarraacctteerrss iinn aann AArrgguummeenntt
- Sometimes it is desirable to give as one argument a string containing one
- or more blank space characters. This may be necessary to defeat the nine
- argument limit or to specify arguments to macros which expect particular
- arrangement of items in the argument list. For example, the function
- macro `.Fn' expects the first argument to be the name of a function and
- any remaining arguments to be function parameters. As ANSI C stipulates
- the declaration of function parameters in the parenthesized parameter
- list, each parameter is guaranteed to be at minimum a two word string.
- For example, _i_n_t _f_o_o.
-
- There are two possible ways to pass an argument which contains an embed-
- ded space. _I_m_p_l_e_m_e_n_t_a_t_i_o_n _n_o_t_e: Unfortunately, the most convenient way
- of passing spaces in between quotes by reassigning individual arguments
- before parsing was fairly expensive speed wise and space wise to imple-
- ment in all the macros for AT&T troff. It is not expensive for groff but
- for the sake of portability, has been limited to the following macros
- which need it the most:
-
- Cd Configuration declaration (section 4 _S_Y_N_O_P_S_I_S)
- Bl Begin list (for the width specifier).
- Em Emphasized text.
- Fn Functions (sections two and four).
- It List items.
- Li Literal text.
- Sy Symbolic text.
- %B Book titles.
- %J Journal names.
- %O Optional notes for a reference.
- %R Report title (in a reference).
- %T Title of article in a book or journal.
-
- One way of passing a string containing blank spaces is to use the hard or
- unpaddable space character `\ ', that is, a blank space preceded by the
- escape character `\'. This method may be used with any macro but has the
- side effect of interfering with the adjustment of text over the length of
- a line. Troff sees the hard space as if it were any other printable
- character and cannot split the string into blank or newline separated
- pieces as one would expect. The method is useful for strings which are
- not expected to overlap a line boundary. For example:
-
- ffeettcchh(_c_h_a_r _*_s_t_r) is created by `.Fn fetch char\ *str'
-
- ffeettcchh(_c_h_a_r _*_s_t_r) can also be created by `.Fn fetch "*char *str"'
-
- If the `\' or quotes were omitted, `.Fn' would see three arguments and
- the result would be:
-
- ffeettcchh(_c_h_a_r, _*_s_t_r)
-
- For an example of what happens when the parameter list overlaps a newline
- boundary, see the _B_U_G_S section.
-
- TTrraaiilliinngg BBllaannkk SSppaaccee CChhaarraacctteerrss
- Troff can be confused by blank space characters at the end of a line. It
- is a wise preventive measure to globally remove all blank spaces from
- <blank-space><end-of-line> character sequences. Should the need arise to
- force a blank character at the end of a line, it may be forced with an
- unpaddable space and the `\&' escape character. For example,
- `string\ \&'.
-
- EEssccaappiinngg SSppeecciiaall CChhaarraacctteerrss
- Special characters like the newline character `\n', are handled by re-
- placing the `\' with `\e' (e.g. `\en') to preserve the backslash.
-
- TTHHEE AANNAATTOOMMYY OOFF AA MMAANN PPAAGGEE
- The body of a man page is easily constructed from a basic template found
- in the file:
-
- .\" /usr/share/misc/man.template:
- .\" The following six lines are required.
- .Dd Month day, year
- .Os OPERATING_SYSTEM [version/release]
- .Dt DOCUMENT_TITLE [section number] [volume]
- .Sh NAME
- .Sh SYNOPSIS
- .Sh DESCRIPTION
- .\" The following requests should be uncommented and
- .\" used where appropriate. This next request is
- .\" for sections 2 and 3 function return values only.
- .\" .Sh RETURN VALUES
- .\" This next request is for sections 1, 6, 7 & 8 only
- .\" .Sh ENVIRONMENT
- .\" .Sh FILES
- .\" .Sh EXAMPLES
- .\" This next request is for sections 1, 6, 7 & 8 only
- .\" (command return values (to shell) and
- .\" fprintf/stderr type diagnostics)
- .\" .Sh DIAGNOSTICS
- .\" The next request is for sections 2 and 3 error
- .\" and signal handling only.
- .\" .Sh ERRORS
- .\" .Sh SEE ALSO
- .\" .Sh STANDARDS
- .\" .Sh HISTORY
- .\" .Sh AUTHORS
- .\" .Sh BUGS
-
- The first items in the template are the macros (.Dd, .Os, .Dt); the docu-
- ment date, the operating system the man page or subject source is devel-
- oped or modified for, and the man page title (_i_n _u_p_p_e_r _c_a_s_e) along with
- the section of the manual the page belongs in. These macros identify the
- page, and are discussed below in _T_I_T_L_E _M_A_C_R_O_S.
-
- The remaining items in the template are section headers (.Sh); of which
- _N_A_M_E, _S_Y_N_O_P_S_I_S and _D_E_S_C_R_I_P_T_I_O_N are mandatory. The headers are discussed
- in _P_A_G_E _S_T_R_U_C_T_U_R_E _D_O_M_A_I_N, after presentation of _M_A_N_U_A_L _D_O_M_A_I_N. Several
- content macros are used to demonstrate page layout macros; reading about
- content macros before page layout macros is recommended.
-
- TTIITTLLEE MMAACCRROOSS
- The title macros are the first portion of the page structure domain, but
- are presented first and separate for someone who wishes to start writing
- a man page yesterday. Three header macros designate the document title
- or manual page title, the operating system, and the date of authorship.
- These macros are one called once at the very beginning of the document
- and are used to construct the headers and footers only.
-
- .Dt DOCUMENT_TITLE section# [volume]
- The document title is the subject of the man page and must be in
- CAPITALS due to troff limitations. The section number may be
- 1, ..., 8, and if it is specified, the volume title may be omit-
- ted. A volume title may be arbitrary or one of the following:
-
- AMD UNIX Ancestral Manual Documents
- SMM UNIX System Manager's Manual
- URM UNIX Reference Manual
- PRM UNIX Programmer's Manual
-
- The default volume labeling is URM for sections 1, 6, and 7; SMM
- for section 8; PRM for sections 2, 3, 4, and 5.
-
- .Os operating_system release#
- The name of the operating system should be the common acronym,
- e.g. BSD or ATT. The release should be the standard release
- nomenclature for the system specified, e.g. 4.3, 4.3+Tahoe, V.3,
- V.4. Unrecognized arguments are displayed as given in the page
- footer. For instance, a typical footer might be:
-
- .Os BSD 4.3
-
- or for a locally produced set
-
- .Os CS Department
-
- The Berkeley default, `.Os' without an argument, has been defined
- as BSD Experimental in the site specific file
- _/_u_s_r_/_s_r_c_/_s_h_a_r_e_/_t_m_a_c_/_d_o_c_-_c_o_m_m_o_n. It really should default to
- LOCAL. Note, if the `.Os' macro is not present, the bottom left
- corner of the page will be ugly.
-
- .Dd month day, year
- The date should be written formally:
-
- January 25, 1989
-
- MMAANNUUAALL DDOOMMAAIINN
- WWhhaatt''ss iinn aa nnaammee......
- The manual domain macro names are derived from the day to day informal
- language used to describe commands, subroutines and related files.
- Slightly different variations of this language are used to describe the
- three different aspects of writing a man page. First, there is the de-
- scription of --mmddoocc macro request usage. Second is the description of a
- UNIX command _w_i_t_h --mmddoocc macros and third, the description of a command to
- a user in the verbal sense; that is, discussion of a command in the text
- of a man page.
-
-
- In the first case, troff(1) macros are themselves a type of command; the
- general syntax for a troff command is:
-
- .Va argument1 argument2 ... argument9
-
- The `.Va' is a macro command or request, and anything following it is an
- argument to be processed. In the second case, the description of a UNIX
- command using the content macros is a bit more involved; a typical
- _S_Y_N_O_P_S_I_S command line might be displayed as:
-
- ffiilltteerr [--ffllaagg] _i_n_f_i_l_e _o_u_t_f_i_l_e
-
- Here, ffiilltteerr is the command name and the bracketed string --ffllaagg is a _f_l_a_g
- argument designated as optional by the option brackets. In --mmddoocc terms,
- _i_n_f_i_l_e and _o_u_t_f_i_l_e are called _a_r_g_u_m_e_n_t_s. The macros which formatted the
- above example:
-
- .Nm filter
- .Op Fl flag
- .Ar infile outfile
-
- In the third case, discussion of commands and command syntax includes
- both examples above, but may add more detail. The arguments _i_n_f_i_l_e and
- _o_u_t_f_i_l_e from the example above might be referred to as _o_p_e_r_a_n_d_s or _f_i_l_e
- _a_r_g_u_m_e_n_t_s. Some command line argument lists are quite long:
-
- mmaakkee [--eeiikknnqqrrssttvv] [--DD _v_a_r_i_a_b_l_e] [--dd _f_l_a_g_s] [--ff _m_a_k_e_f_i_l_e]
- [--II _d_i_r_e_c_t_o_r_y] [--jj _m_a_x___j_o_b_s] [_v_a_r_i_a_b_l_e_=_v_a_l_u_e] [_t_a_r_g_e_t _._._.]
-
- Here one might talk about the command mmaakkee and qualify the argument
- _m_a_k_e_f_i_l_e, as an argument to the flag, --ff, or discuss the optional file
- operand _t_a_r_g_e_t. In the verbal context, such detail can prevent confusion,
- however the --mmddoocc package does not have a macro for an argument _t_o a
- flag. Instead the `Ar' argument macro is used for an operand or file ar-
- gument like _t_a_r_g_e_t as well as an argument to a flag like _v_a_r_i_a_b_l_e. The
- make command line was produced from:
-
- .Nm make
- .Op Fl eiknqrstv
- .Op Fl D Ar variable
- .Op Fl d Ar flags
- .Op Fl f Ar makefile
- .Op Fl I Ar directory
- .Op Fl j Ar max_jobs
- .Op Ar variable=value
- .Bk -words
- .Op Ar target ...
- .Ek
-
- The `.Bk' and `.Ek' macros are explained in _K_e_e_p_s.
-
- GGeenneerraall SSyynnttaaxx
- The manual domain and general text domain macros share a similar syntax
- with a few minor deviations: `.Ar', `.Fl', `.Nm', and `.Pa' differ only
- when called without arguments; `.Fn' and `.Xr' impose an order on their
- argument lists and the `.Op' and `.Fn' macros have nesting limitations.
- All content macros are capable of recognizing and properly handling punc-
- tuation, provided each punctuation character is separated by a leading
- space. If an request is given:
-
- .Li sptr, ptr),
-
- The result is:
-
- sptr, ptr),
-
-
- The punctuation is not recognized and all is output in the literal font.
- If the punctuation is separated by a leading white space:
-
- .Li sptr , ptr ) ,
-
- The result is:
-
- sptr, ptr),
-
- The punctuation is now recognized and is output in the default font dis-
- tinguishing it from the strings in literal font.
-
- To remove the special meaning from a punctuation character escape it with
- `\&'. Troff is limited as a macro language, and has difficulty when pre-
- sented with a string containing a member of the mathematical, logical or
- quotation set:
-
- {+,-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
-
- The problem is that troff may assume it is supposed to actually perform
- the operation or evaluation suggested by the characters. To prevent the
- accidental evaluation of these characters, escape them with `\&'. Typical
- syntax is shown in the first content macro displayed below, `.Ad'.
-
- AAddddrreessss MMaaccrroo
- The address macro identifies an address construct of the form addr1[,ad-
- dr2[,addr3]].
-
- Usage: .Ad address ... { . , ; : ( ) [ ]}
- .Ad addr1 _a_d_d_r_1
- .Ad addr1 . _a_d_d_r_1.
- .Ad addr1 , file2 _a_d_d_r_1, _f_i_l_e_2
- .Ad f1 , f2 , f3 : _f_1, _f_2, _f_3:
- .Ad addr ) ) , _a_d_d_r)),
-
- It is an error to call .Ad without arguments. .Ad is callable by other
- macros and is parsed.
-
- AArrgguummeenntt MMaaccrroo
- The .Ar argument macro may be used whenever a command line argument is
- referenced.
-
- Usage: .Ar argument ... { . , ; : ( ) [ ]}
- .Ar _f_i_l_e _._._.
- .Ar file1 _f_i_l_e_1
- .Ar file1 . _f_i_l_e_1.
- .Ar file1 file2 _f_i_l_e_1 _f_i_l_e_2
- .Ar f1 f2 f3 : _f_1 _f_2 _f_3:
- .Ar file ) ) , _f_i_l_e)),
-
- If .Ar is called without arguments `_f_i_l_e _._._.' is assumed. The .Ar macro
- is parsed and is callable.
-
- CCoonnffiigguurraattiioonn DDeeccllaarraattiioonn ((sseeccttiioonn ffoouurr oonnllyy))
- The `.Cd' macro is used to demonstrate a config(8) declaration for a de-
- vice interface in a section four manual. This macro accepts quoted argu-
- ments (double quotes only).
-
- ddeevviiccee llee00 aatt ssccooddee?? produced by: `.Cd device le0 at scode?'.
-
- CCoommmmaanndd MMooddiiffiieerr
- The command modifier is identical to the `.Fl' (flag) command with the
- exception the `.Cm' macro does not assert a dash in front of every argu-
- ment. Traditionally flags are marked by the preceding dash, some com-
- mands or subsets of commands do not use them. Command modifiers may also
- be specified in conjunction with interactive commands such as editor com-
- mands. See _F_l_a_g_s.
-
- DDeeffiinneedd VVaarriiaabblleess
- A variable which is defined in an include file is specified by the macro
- `.Dv'.
-
- Usage: .Dv defined_variable ... { . , ; : ( ) [ ]}
- .Dv MAXHOSTNAMELEN MAXHOSTNAMELEN
- .Dv TIOCGPGRP ) TIOCGPGRP)
-
- It is an error to call `.Dv' without arguments. `.Dv' is parsed and is
- callable.
-
- EErrrrnnoo''ss ((SSeeccttiioonn ttwwoo oonnllyy))
- The `.Er' errno macro specifies the error return value for section two
- library routines. The second example below shows `.Er' used with the
- `.Bq' general text domain macro, as it would be used in a section two
- manual page.
-
- Usage: .Er ERRNOTYPE ... { . , ; : ( ) [ ]}
- .Er ENOENT ENOENT
- .Er ENOENT ) ; ENOENT);
- .Bq Er ENOTDIR [ENOTDIR]
-
- It is an error to call `.Er' without arguments. The `.Er' macro is
- parsed and is callable.
-
- EEnnvviirroonnmmeenntt VVaarriiaabblleess
- The `.Ev' macro specifies an environment variable.
-
- Usage: .Ev argument ... { . , ; : ( ) [ ]}
- .Ev DISPLAY DISPLAY
- .Ev PATH . PATH.
- .Ev PRINTER ) ) , PRINTER)),
-
- It is an error to call `.Ev' without arguments. The `.Ev' macro is
- parsed and is callable.
-
- FFuunnccttiioonn AArrgguummeenntt
- The `.Fa' macro is used to refer to function arguments (parameters) out-
- side of the _S_Y_N_O_P_S_I_S section of the manual or inside the _S_Y_N_O_P_S_I_S section
- should a parameter list be too long for the `.Fn' macro and the enclosure
- macros `.Fo' and `.Fc' must be used. `.Fa' may also be used to refer to
- structure members.
-
- Usage: .Fa function_argument ... { . , ; : ( ) [ ]}
- .Fa d_namlen ) ) , _d___n_a_m_l_e_n)),
- .Fa iov_len _i_o_v___l_e_n
-
- It is an error to call `.Fa' without arguments. `.Fa' is parsed and is
- callable.
-
- FFuunnccttiioonn DDeeccllaarraattiioonn
- The `.Fd' macro is used in the _S_Y_N_O_P_S_I_S section with section two or three
- functions. The `.Fd' macro does not call other macros and is not
- callable by other macros.
-
- Usage: .Fd include_file (or defined variable)
-
- In the _S_Y_N_O_P_S_I_S section a `.Fd' request causes a line break if a function
- has already been presented and a break has not occurred. This leaves a
- nice vertical space in between the previous function call and the decla-
- ration for the next function.
-
-
- FFllaaggss
- The `.Fl' macro handles command line flags. It prepends a dash, `-', to
- the flag. For interactive command flags, which are not prepended with a
- dash, the `.Cm' (command modifier) macro is identical, but without the
- dash.
-
- Usage: .Fl argument ... { . , ; : ( ) [ ]}
- .Fl --
- .Fl cfv --ccffvv
- .Fl cfv . --ccffvv.
- .Fl s v t --ss --vv --tt
- .Fl - , ----,
- .Fl xyz ) , --xxyyzz),
-
- The `.Fl' macro without any arguments results in a dash representing
- stdin/stdout. Note that giving `.Fl' a single dash, will result in two
- dashes. The `.Fl' macro is parsed and is callable.
-
- FFuunnccttiioonnss ((lliibbrraarryy rroouuttiinneess))
- The .Fn macro is modeled on ANSI C conventions.
-
- Usage: .Fn [type] function [[type] parameters ... { . , ; : ( ) [ ]}]
- .Fn getchar ggeettcchhaarr()
- .Fn strlen ) , ssttrrlleenn()),
- .Fn "int align" "const * char *sptrs", iinntt aalliiggnn(_c_o_n_s_t _* _c_h_a_r _*_s_p_t_r_s),
-
- It is an error to call `.Fn' without any arguments. The `.Fn' macro is
- parsed and is callable, note that any call to another macro signals the
- end of the `.Fn' call (it will close-parenthesis at that point).
-
- For functions that have more than eight parameters (and this is rare),
- the macros `.Fo' (function open) and `.Fc' (function close) may be used
- with `.Fa' (function argument) to get around the limitation. For example:
-
- .Fo "int res_mkquery"
- .Fa "int op"
- .Fa "char *dname"
- .Fa "int class"
- .Fa "int type"
- .Fa "char *data"
- .Fa "int datalen"
- .Fa "struct rrec *newrr"
- .Fa "char *buf"
- .Fa "int buflen"
- .Fc
-
- Produces:
-
- iinntt rreess__mmkkqquueerryy(_i_n_t _o_p, _c_h_a_r _*_d_n_a_m_e, _i_n_t _c_l_a_s_s, _i_n_t _t_y_p_e,
- _c_h_a_r _*_d_a_t_a, _i_n_t _d_a_t_a_l_e_n, _s_t_r_u_c_t _r_r_e_c _*_n_e_w_r_r, _c_h_a_r _*_b_u_f, _i_n_t _b_u_f_l_e_n)
-
- The `.Fo' and `.Fc' macros are parsed and are callable. In the _S_Y_N_O_P_S_I_S
- section, the function will always begin at the beginning of line. If
- there is more than one function presented in the _S_Y_N_O_P_S_I_S section and a
- function type has not been given, a line break will occur, leaving a nice
- vertical space between the current function name and the one prior. At
- the moment, `.Fn' does not check its word boundaries against troff line
- lengths and may split across a newline ungracefully. This will be fixed
- in the near future.
-
- FFuunnccttiioonn TTyyppee
- This macro is intended for the _S_Y_N_O_P_S_I_S section. It may be used anywhere
- else in the man page without problems, but its main purpose is to present
- the function type in kernel normal form for the _S_Y_N_O_P_S_I_S of sections two
- and three (it causes a page break allowing the function name to appear on
- the next line).
-
- Usage: .Ft type ... { . , ; : ( ) [ ]}
- .Ft struct stat _s_t_r_u_c_t _s_t_a_t
-
- The `.Ft' request is not callable by other macros.
-
- IInntteerraaccttiivvee CCoommmmaannddss
- The `.Ic' macro designates an interactive or internal command.
-
- Usage: .Li argument ... { . , ; : ( ) [ ]}
- .Ic :wq ::wwqq
- .Ic do while {...} ddoo wwhhiillee {{......}}
- .Ic setenv , unsetenv sseetteennvv, uunnsseetteennvv
-
- It is an error to call `.Ic' without arguments. The `.Ic' macro is
- parsed and is callable.
-
- LLiitteerraallss
- The `.Li' literal macro may be used for special characters, variable con-
- stants, anything which should be displayed as it would be typed.
-
- Usage: .Li argument ... { . , ; : ( ) [ ]}
- .Li \en \n
- .Li M1 M2 M3 ; M1 M2 M3;
- .Li cntrl-D ) , cntrl-D),
- .Li 1024 ... 1024 ...
-
- The `.Li' macro is parsed and is callable.
-
- NNaammee MMaaccrroo
- The `.Nm' macro is used for the document title or subject name. It has
- the peculiarity of remembering the first argument it was called with,
- which should always be the subject name of the page. When called without
- arguments, `.Nm' regurgitates this initial name for the sole purpose of
- making less work for the author. Note: a section two or three document
- function name is addressed with the `.Nm' in the _N_A_M_E section, and with
- `.Fn' in the _S_Y_N_O_P_S_I_S and remaining sections. For interactive commands,
- such as the `while' command keyword in csh(1), the `.Ic' macro should be
- used. While the `.Ic' is nearly identical to `.Nm', it can not recall
- the first argument it was invoked with.
-
- Usage: .Nm argument ... { . , ; : ( ) [ ]}
- .Nm mdoc.samples mmddoocc..ssaammpplleess
- .Nm \-mdoc --mmddoocc.
- .Nm foo ) ) , ffoooo)),
- .Nm mmddoocc..ssaammpplleess
-
- The `.Nm' macro is parsed and is callable.
-
- OOppttiioonnss
- The `.Op' macro places option brackets around the any remaining arguments
- on the command line, and places any trailing punctuation outside the
- brackets. The macros `.Oc' and `.Oo' may be used across one or more
- lines.
-
- Usage: .Op options ... { . , ; : ( ) [ ]}
- .Op []
- .Op Fl k [--kk]
- .Op Fl k ) . [--kk]).
- .Op Fl k Ar kookfile [--kk _k_o_o_k_f_i_l_e]
- .Op Fl k Ar kookfile , [--kk _k_o_o_k_f_i_l_e],
- .Op Ar objfil Op Ar corfil [_o_b_j_f_i_l [_c_o_r_f_i_l]]
- .Op Fl c Ar objfil Op Ar corfil , [--cc _o_b_j_f_i_l [_c_o_r_f_i_l]],
- .Op word1 word2 [word1 word2]
-
-
- The `.Oc' and `.Oo' macros:
-
- .Oo
- .Op Fl k Ar kilobytes
- .Op Fl i Ar interval
- .Op Fl c Ar count
- .Oc
-
- Produce: [[--kk _k_i_l_o_b_y_t_e_s] [--ii _i_n_t_e_r_v_a_l] [--cc _c_o_u_n_t]]
-
- The macros `.Op', `.Oc' and `.Oo' are parsed and are callable.
-
- PPaatthhnnaammeess
- The `.Pa' macro formats path or file names.
-
- Usage: .Pa pathname { . , ; : ( ) [ ]}
- .Pa /usr/share _/_u_s_r_/_s_h_a_r_e
- .Pa /tmp/fooXXXXX ) . _/_t_m_p_/_f_o_o_X_X_X_X_X).
-
- The `.Pa' macro is parsed and is callable.
-
- VVaarriiaabblleess
- Generic variable reference:
-
- Usage: .Va variable ... { . , ; : ( ) [ ]}
- .Va count _c_o_u_n_t
- .Va settimer, _s_e_t_t_i_m_e_r,
- .Va int *prt ) : _i_n_t _*_p_r_t):
- .Va char s ] ) ) , _c_h_a_r _s])),
-
- It is an error to call `.Va' without any arguments. The `.Va' macro is
- parsed and is callable.
-
- MMaannuuaall PPaaggee CCrroossss RReeffeerreenncceess
- The `.Xr' macro expects the first argument to be a manual page name, and
- the second argument, if it exists, to be either a section page number or
- punctuation. Any remaining arguments are assumed to be punctuation.
-
- Usage: .Xr man_page [1,...,8] { . , ; : ( ) [ ]}
- .Xr mdoc mdoc
- .Xr mdoc , mdoc,
- .Xr mdoc 7 mdoc(7)
- .Xr mdoc 7 ) ) , mdoc(7))),
-
- The `.Xr' macro is parsed and is callable. It is an error to call `.Xr'
- without any arguments.
-
- GGEENNEERRAALL TTEEXXTT DDOOMMAAIINN
- AATT&&TT MMaaccrroo
- Usage: .At [v6 | v7 | 32v | V.1 | V.4] ... { . , ; : ( ) [ ]}
- .At
- .At v6 . Version 6 AT&T UNIX.
-
- The `.At' macro is _n_o_t parsed and _n_o_t callable. It accepts at most two
- arguments.
-
- BBSSDD MMaaccrroo
- Usage: .Bx [Version/release] ... { . , ; : ( ) [ ]}
- .Bx BSD UNIX
- .Bx 4.3 . 4.3BSD.
-
- The `.Bx' macro is parsed and is callable.
-
- UUNNIIXX MMaaccrroo
- Usage: .Ux ... { . , ; : ( ) [ ]}
-
- .Ux UNIX
-
- The `.Ux' macro is parsed and is callable.
-
- EEmmpphhaassiiss MMaaccrroo
- Text may be stressed or emphasized with the `.Em' macro. The usual font
- for emphasis is italic.
-
- Usage: .Em argument ... { . , ; : ( ) [ ]}
- .Em does not _d_o_e_s _n_o_t
- .Em exceed 1024 . _e_x_c_e_e_d _1_0_2_4.
- .Em vide infra ) ) , _v_i_d_e _i_n_f_r_a)),
-
- The `.Em' macro is parsed and is callable. It is an error to call `.Em'
- without arguments.
-
- EEnncclloossuurree aanndd QQuuoottiinngg MMaaccrrooss
- The concept of enclosure is similar to quoting. The object being to en-
- close one or more strings between a pair of characters like quotes or
- parentheses. The terms quoting and enclosure are used interchangeably
- throughout this document. Most of the one line enclosure macros end in
- small letter `q' to give a hint of quoting, but there are a few irregu-
- larities. For each enclosure macro there is also a pair of open and
- close macros which end in small letters `o' and `c' respectively. These
- can be used across one or more lines of text and while they have nesting
- limitations, the one line quote macros can be used inside of them.
-
- _Q_u_o_t_e _C_l_o_s_e _O_p_e_n _F_u_n_c_t_i_o_n _R_e_s_u_l_t
- .Aq .Ac .Ao Angle Bracket Enclosure <string>
- .Bq .Bc .Bo Bracket Enclosure [string]
- .Dq .Dc .Do Double Quote ``string''
- .Ec .Eo Enclose String (in XX) XXstringXX
- .Pq .Pc .Po Parenthesis Enclosure (string)
- .Ql Quoted Literal `st' or string
- .Qq .Qc .Qo Straight Double Quote "string"
- .Sq .Sc .So Single Quote `string'
-
- Except for the irregular macros noted below, all of the quoting macros
- are parsed and callable. All handle punctuation properly, as long as it
- is presented one character at a time and separated by spaces. The quot-
- ing macros examine opening and closing punctuation to determine whether
- it comes before or after the enclosing string. This makes some nesting
- possible.
-
- .Ec, .Eo These macros expect the first argument to be the opening and
- closing strings respectively.
-
- .Ql The quoted literal macro behaves differently for troff than
- nroff. If formatted with nroff, a quoted literal is always
- quoted. If formatted with troff, an item is only quoted if the
- width of the item is less than three constant width characters.
- This is to make short strings more visible where the font
- change to literal (constant width) is less noticeable.
-
- .Pf The prefix macro is not callable, but it is parsed:
-
- .Pf ( Fa name2
- becomes (_n_a_m_e_2.
-
- The `.Ns' (no space) macro performs the analogous suffix func-
- tion.
-
- Examples of quoting:
- .Aq <>
-
-
- .Aq Ar ctype.h ) , <_c_t_y_p_e_._h>),
- .Bq []
- .Bq Em Greek , French . [_G_r_e_e_k, _F_r_e_n_c_h].
- .Dq ``''
- .Dq string abc . ``string abc''.
- .Dq '^[A-Z]' ``'^[A-Z]'''
- .Ql man mdoc `man mdoc'
- .Qq ""
- .Qq string ) , "string"),
- .Qq string Ns ), "string),"
- .Sq `'
- .Sq string `string'
-
- For a good example of nested enclosure macros, see the `.Op' option
- macro. It was created from the same underlying enclosure macros as those
- presented in the list above. The `.Xo' and `.Xc' extended argument list
- macros were also built from the same underlying routines and are a good
- example of --mmddoocc macro usage at its worst.
-
- NNoo--OOpp oorr NNoorrmmaall TTeexxtt MMaaccrroo
- The macro .No is a hack for words in a macro command line which should
- _n_o_t be formatted and follows the conventional syntax for content macros.
-
- NNoo SSppaaccee MMaaccrroo
- The `.Ns' macro eliminates unwanted spaces in between macro requests. It
- is useful for old style argument lists where there is no space between
- the flag and argument:
-
- .Op Fl I Ns Ar directory produces [--II_d_i_r_e_c_t_o_r_y]
-
- Note: the `.Ns' macro always invokes the `.No' macro after eliminating
- the space unless another macro name follows it. The macro `.Ns' is
- parsed and is callable.
-
- SSeeccttiioonn CCrroossss RReeffeerreenncceess
- The `.Sx' macro designates a reference to a section header within the
- same document. It is parsed and is callable.
-
- .Sx FILES _F_I_L_E_S
-
- SSyymmbboolliicc
- The symbolic emphasis macro is generally a boldface macro in either the
- symbolic sense or the traditional English usage.
-
- Usage: .Sy symbol ... { . , ; : ( ) [ ]}
- .Sy Important Notice IImmppoorrttaanntt NNoottiiccee
-
- The `.Sy' macro is parsed and is callable. Arguments to `.Sy' may be
- quoted.
-
- RReeffeerreenncceess aanndd CCiittaattiioonnss
- The following macros make a modest attempt to handle references. At
- best, the macros make it convenient to manually drop in a subset of refer
- style references.
-
- .Rs Reference Start. Causes a line break and begins collection
- of reference information until the reference end macro is
- read.
- .Re Reference End. The reference is printed.
- .%A Reference author name, one name per invocation.
- .%B Book title.
- .%C City/place.
- .%D Date.
- .%J Journal name.
-
-
- .%N Issue number.
- .%O Optional information.
- .%P Page number.
- .%R Report name.
- .%T Title of article.
- .%V Volume(s).
-
- The macros beginning with `%' are not callable, and are parsed only for
- the trade name macro which returns to its caller. (And not very pre-
- dictably at the moment either.) The purpose is to allow trade names to
- be pretty printed in troff/ditroff output.
-
- TTrraaddee NNaammeess ((oorr AAccrroonnyymmss aanndd TTyyppee NNaammeess))
- The trade name macro is generally a small caps macro for all upper case
- words longer than two characters.
-
- Usage: .Tn symbol ... { . , ; : ( ) [ ]}
- .Tn DEC DEC
- .Tn ASCII ASCII
-
- The `.Tn' macro is parsed and is callable by other macros.
-
- EExxtteennddeedd AArrgguummeennttss
- The .Xo and .Xc macros allow one to extend an argument list on a macro
- boundary. Argument lists cannot be extended within a macro which expects
- all of its arguments on one line such as `.Op'.
-
- Here is an example of `.Xo' using the space mode macro to turn spacing
- off:
-
- .Sm off
- .It Xo Sy I Ar operation
- .No \en Ar count No \en
- .Xc
- .Sm on
-
- Produces
-
- II_o_p_e_r_a_t_i_o_n\n_c_o_u_n_t\n
-
- Another one:
-
- .Sm off
- .It Cm S No / Ar old_pattern Xo
- .No / Ar new_pattern
- .No / Op Cm g
- .Xc
- .Sm on
-
- Produces
-
- SS/_o_l_d___p_a_t_t_e_r_n/_n_e_w___p_a_t_t_e_r_n/[gg]
-
- Another example of `.Xo' and using enclosure macros: Test the value of an
- variable.
-
- .It Xo
- .Ic .ifndef
- .Oo \&! Oc Ns Ar variable
- .Op Ar operator variable ...
- .Xc
-
- Produces
-
-
-
- ..iiffnnddeeff [!]_v_a_r_i_a_b_l_e [_o_p_e_r_a_t_o_r _v_a_r_i_a_b_l_e _._._.]
-
- All of the above examples have used the `.Xo' macro on the argument list
- of the `.It' (list-item) macro. The extend macros are not used very of-
- ten, and when they are it is usually to extend the list-item argument
- list. Unfortunately, this is also where the extend macros are the most
- finicky. In the first two examples, spacing was turned off; in the
- third, spacing was desired in part of the output but not all of it. To
- make these macros work in this situation make sure the `.Xo' and `.Xc'
- macros are placed as shown in the third example. If the `.Xo' macro is
- not alone on the `.It' argument list, spacing will be unpredictable. The
- `.Ns' (no space macro) must not occur as the first or last macro on a
- line in this situation. Out of 900 manual pages (about 1500 actual
- pages) currently released with BSD UNIX only fifteen use the `.Xo' macro.
-
- PPAAGGEE SSTTRRUUCCTTUURREE DDOOMMAAIINN
- SSeeccttiioonn HHeeaaddeerrss
- The first three `.Sh' section header macros list below are required in
- every man page. The remaining section headers are recommended at the
- discretion of the author writing the manual page. The `.Sh' macro can
- take up to nine arguments. It is parsed and but is not callable.
-
- .Sh NAME The `.Sh NAME' macro is mandatory. If not specified, the
- headers, footers and page layout defaults will not be set
- and things will be rather unpleasant. The _N_A_M_E section
- consists of at least three items. The first is the `.Nm'
- name macro naming the subject of the man page. The second
- is the Name Description macro, `.Nd', which separates the
- subject name from the third item, which is the description.
- The description should be the most terse and lucid possi-
- ble, as the space available is small.
-
- .Sh SYNOPSIS The _S_Y_N_O_P_S_I_S section describes the typical usage of the
- subject of a man page. The macros required are either
- `.Nm', `.Cd', `.Fn', (and possibly `.Fo', `.Fc', `.Fd',
- `.Ft' macros). The function name macro `.Fn' is required
- for manual page sections 2 and 3, the command and general
- name macro `.Nm' is required for sections 1, 5, 6, 7, 8.
- Section 4 manuals require a `.Nm, .Fd' or a `.Cd' configu-
- ration device usage macro. Several other macros may be
- necessary to produce the synopsis line as shown below:
-
- ccaatt [--bbeennssttuuvv] [--] _f_i_l_e _._._.
-
- The following macros were used:
-
- .Nm cat
- .Op Fl benstuv
- .Op Fl
- .Ar
-
- NNoottee: The macros `.Op', `.Fl', and `.Ar' recognize the pipe
- bar character `|', so a command line such as:
-
- .Op Fl a | Fl b
-
- will not go orbital. Troff normally interprets a | as a
- special operator. See _P_R_E_D_E_F_I_N_E_D _S_T_R_I_N_G_S for a usable |
- character in other situations.
-
- .Sh DESCRIPTION
- In most cases the first text in the _D_E_S_C_R_I_P_T_I_O_N section is
- a brief paragraph on the command, function or file, fol-
- lowed by a lexical list of options and respective explana-
- tions. To create such a list, the `.Bl' begin-list, `.It'
- list-item and `.El' end-list macros are used (see _L_i_s_t_s _a_n_d
- _C_o_l_u_m_n_s below).
-
- The following `.Sh' section headers are part of the preferred manual page
- layout and must be used appropriately to maintain consistency. They are
- listed in the order in which they would be used.
-
- .Sh ENVIRONMENT
- The _E_N_V_I_R_O_N_M_E_N_T section should reveal any related environment
- variables and clues to their behavior and/or usage.
-
- .Sh EXAMPLES
- There are several ways to create examples. See the _E_X_A_M_P_L_E_S
- section below for details.
-
- .Sh FILES
- Files which are used or created by the man page subject should
- be listed via the `.Pa' macro in the _F_I_L_E_S section.
-
- .Sh SEE ALSO
- References to other material on the man page topic and cross
- references to other relevant man pages should be placed in the
- _S_E_E _A_L_S_O section. Cross references are specified using the
- `.Xr' macro. At this time refer(1) style references are not
- accommodated.
-
- .Sh STANDARDS
- If the command, library function or file adheres to a specific
- implementation such as IEEE Std1003.2 (``POSIX'') or ANSI
- C3.159-1989 (``ANSI C'') this should be noted here. If the
- command does not adhere to any standard, its history should be
- noted in the _H_I_S_T_O_R_Y section.
-
- .Sh HISTORY
- Any command which does not adhere to any specific standards
- should be outlined historically in this section.
-
- .Sh AUTHORS
- Credits, if need be, should be placed here.
-
- .Sh DIAGNOSTICS
- Diagnostics from a command should be placed in this section.
-
- .Sh ERRORS
- Specific error handling, especially from library functions (man
- page sections 2 and 3) should go here. The `.Er' macro is used
- to specify an errno.
-
- .Sh BUGS Blatant problems with the topic go here...
-
- User specified `.Sh' sections may be added, for example, this section was
- set with:
-
- .Sh PAGE LAYOUT MACROS
-
- PPaarraaggrraapphhss aanndd LLiinnee SSppaacciinngg..
-
- .Pp The .Pp paragraph command may be used to specify a line space
- where necessary. The macro is not necessary after a `.Sh' or
- `.Ss' macro or before a `.Bl' macro. (The `.Bl' macro asserts a
- vertical distance unless the -compact flag is given).
-
- KKeeeeppss
- The only keep that is implemented at this time is for words. The macros
- are `.Bk' (begin-keep) and `.Ek' (end-keep). The only option that `.Bl'
- accepts is --wwoorrddss and is useful for preventing line breaks in the middle
- of options. In the example for the make command line arguments (see
- _W_h_a_t_'_s _i_n _a _n_a_m_e), the keep prevented nroff from placing up the flag and
- the argument on separate lines. (Actually, the option macro used to pre-
- vent this from occurring, but was dropped when the decision (religious)
- was made to force right justified margins in troff as options in general
- look atrocious when spread across a sparse line. More work needs to be
- done with the keep macros, a --lliinnee option needs to be added.)
-
- EExxaammpplleess aanndd DDiissppllaayyss
- There are five types of displays, a quickie one line indented display
- `.D1', a quickie one line literal display `.Dl', and a block literal,
- block filled and block ragged which use the `.Bd' begin-display and `.Ed'
- end-display macros.
-
- .D1 (D-one) Display one line of indented text. This macro is parsed,
- but it is not callable.
-
- --llddgghhffssttrruu
-
- The above was produced by: .Dl --llddgghhffssttrruu.
-
- .Dl (D-ell) Display one line of indented _l_i_t_e_r_a_l text. The `.Dl' ex-
- ample macro has been used throughout this file. It allows the in-
- dent (display) of one line of text. Its default font is set to
- constant width (literal) however it is parsed and will recognized
- other macros. It is not callable however.
-
- % ls -ldg /usr/local/bin
-
- The above was produced by .Dl % ls -ldg /usr/local/bin.
-
- .Bd Begin-display. The `.Bd' display must be ended with the `.Ed'
- macro. Displays may be nested within displays and lists. `.Bd'
- has the following syntax:
-
- .Bd display-type [-offset offset_value] [-compact]
-
- The display-type must be one of the following four types and may
- have an offset specifier for indentation: `.Bd'.
-
- --rraaggggeedd Display a block of text as typed, right (and
- left) margin edges are left ragged.
- --ffiilllleedd Display a filled (formatted) block. The block
- of text is formatted (the edges are filled - not
- left unjustified).
- --lliitteerraall Display a literal block, useful for source code
- or simple tabbed or spaced text.
- --ffiillee _f_i_l_e___n_a_m_e The file name following the --ffiillee flag is read
- and displayed. Literal mode is asserted and
- tabs are set at 8 constant width character in-
- tervals, however any troff/--mmddoocc commands in
- file will be processed.
- --ooffffsseett _s_t_r_i_n_g If --ooffffsseett is specified with one of the follow-
- ing strings, the string is interpreted to indi-
- cate the level of indentation for the forthcom-
- ing block of text:
-
- _l_e_f_t Align block on the current left mar-
- gin, this is the default mode of
- `.Bd'.
- _c_e_n_t_e_r Supposedly center the block. At
- this time unfortunately, the block
- merely gets left aligned about an
- imaginary center margin.
- _i_n_d_e_n_t Indents by one default indent value
- or tab. The default indent value is
- also used for the `.D1' display so
- one is guaranteed the two types of
- displays will line up. This indent
- is normally set to 6n or about two
- thirds of an inch (six constant
- width characters).
- _i_n_d_e_n_t_-_t_w_o Indents two times the default indent
- value.
- _r_i_g_h_t This _l_e_f_t aligns the block about two
- inches from the right side of the
- page. This macro needs work and
- perhaps may never do the right thing
- by troff.
-
- .Ed End-display.
-
- TTaaggggeedd LLiissttss aanndd CCoolluummnnss
- There are several types of lists which may be initiated with the `.Bl'
- begin-list macro. Items within the list are specified with the `.It'
- item macro and each list must end with the `.El' macro. Lists may be
- nested within themselves and within displays. Columns may be used inside
- of lists, but lists are unproven inside of columns.
-
- In addition, several list attributes may be specified such as the width
- of a tag, the list offset, and compactness (blank lines between items al-
- lowed or disallowed). Most of this document has been formatted with a
- tag style list (--ttaagg). For a change of pace, the list-type used to pre-
- sent the list-types is an over-hanging list (--oohhaanngg). This type of list
- is quite popular with TeX users, but might look a bit funny after having
- read many pages of tagged lists. The following list types are accepted
- by `.Bl':
-
- --bbuulllleett
- --iitteemm
- --eennuumm
- These three are the simplest types of lists. Once the `.Bl' macro has
- been given, items in the list are merely indicated by a line consisting
- solely of the `.It' macro. For example, the source text for a simple
- enumerated list would look like:
-
- .Bl -enum -compact
- .It
- Item one goes here.
- .It
- And item two here.
- .It
- Lastly item three goes here.
- .El
-
- The results:
-
- 1. Item one goes here.
- 2. And item two here.
- 3. Lastly item three goes here.
-
- A simple bullet list construction:
-
- .Bl -bullet -compact
- .It
- Bullet one goes here.
- .It
- Bullet two here.
- .El
-
- Produces:
-
-
- ++oo Bullet one goes here.
- ++oo Bullet two here.
-
- --ttaagg
- --ddiiaagg
- --hhaanngg
- --oohhaanngg
- --iinnsseett
- These list-types collect arguments specified with the `.It' macro and
- create a label which may be _i_n_s_e_t into the forthcoming text, _h_a_n_g_e_d from
- the forthcoming text, _o_v_e_r_h_a_n_g_e_d from above and not indented or _t_a_g_g_e_d.
- This list was constructed with the `--oohhaanngg' list-type. The `.It' macro
- is parsed only for the inset, hang and tag list-types and is not
- callable. Here is an example of inset labels:
-
- _T_a_g The tagged list (also called a tagged paragraph) is the most
- common type of list used in the Berkeley manuals.
-
- _D_i_a_g Diag lists create section four diagnostic lists and are simi-
- lar to inset lists except callable macros are ignored.
-
- _H_a_n_g Hanged labels are a matter of taste.
-
- _O_h_a_n_g Overhanging labels are nice when space is constrained.
-
- _I_n_s_e_t Inset labels are useful for controlling blocks of paragraphs
- and are valuable for converting --mmddoocc manuals to other formats.
-
- Here is the source text which produced the above example:
-
- .Bl -inset -offset indent
- .It Em Tag
- The tagged list (also called a tagged paragraph) is the
- most common type of list used in the Berkeley manuals.
- .It Em Diag
- Diag lists create section four diagnostic lists
- and are similar to inset lists except callable
- macros are ignored.
- .It Em Hang
- Hanged labels are a matter of taste.
- .It Em Ohang
- Overhanging labels are nice when space is constrained.
- .It Em Inset
- Inset labels are useful for controlling blocks of
- paragraphs and are valuable for converting
- .Nm -mdoc
- manuals to other formats.
- .El
-
- Here is a hanged list with just one item:
-
- _H_a_n_g_e_d labels appear similar to tagged lists when the label is
- smaller than the label width.
-
- _L_o_n_g_e_r _h_a_n_g_e_d _l_i_s_t _l_a_b_e_l_s blend in to the paragraph unlike tagged
- paragraph labels.
-
- And the unformatted text which created it:
-
- .Bl -hang -offset indent
- .It Em Hanged
- labels appear similar to tagged lists when the
- label is smaller than the label width.
- .It Em Longer hanged list labels
- blend in to the paragraph unlike
- tagged paragraph labels.
- .El
-
- The tagged list which follows uses an optional width specifier to control
- the width of the tag.
-
- SL sleep time of the process (seconds blocked)
- PAGEIN number of disk I/O's resulting from references by the pro-
- cess to pages not loaded in core.
- UID numerical user-id of process owner
- PPID numerical id of parent of process process priority (non-
- positive when in non-interruptible wait)
-
- The raw text:
-
- .Bl -tag -width "PAGEIN" -compact -offset indent
- .It SL
- sleep time of the process (seconds blocked)
- .It PAGEIN
- number of disk
- .Tn I/O Ns 's
- resulting from references
- by the process to pages not loaded in core.
- .It UID
- numerical user-id of process owner
- .It PPID
- numerical id of parent of process process priority
- (non-positive when in non-interruptible wait)
- .El
-
- Acceptable width specifiers:
-
- --wwiiddtthh _F_l sets the width to the default width for a flag. All
- callable macros have a default width value. The
- `.Fl', value is presently set to ten constant width
- characters or about five sixth of an inch.
-
- --wwiiddtthh _2_4_n sets the width to 24 constant width characters or
- about two inches. The `n' is absolutely necessary
- for the scaling to work correctly.
-
- --wwiiddtthh _E_N_A_M_E_T_O_O_L_O_N_G
- sets width to the constant width length of the string
- given.
-
- --wwiiddtthh _"_i_n_t _m_k_f_i_f_o_"
- again, the width is set to the constant width of the
- string given.
-
- If a width is not specified for the tag list type, the first time `.It'
- is invoked, an attempt is made to determine an appropriate width. If the
- first argument to `.It' is a callable macro, the default width for that
- macro will be used as if the macro name had been supplied as the width.
- However, if another item in the list is given with a different callable
- macro name, a new and nested list is assumed.
-
- PPRREEDDEEFFIINNEEDD SSTTRRIINNGGSS
- The following strings are predefined as may be used by preceding with the
- troff string interpreting sequence `\*(xx' where _x_x is the name of the
- defined string or as `\*x' where _x is the name of the string. The inter-
- preting sequence may be used any where in the text.
-
- SSttrriinngg NNrrooffff TTrrooffff
- <= <= <=
- >= >= >=
-
-
- Rq '' ''
- Lq `` ``
- ua ^ ^
- aa '
- ga ` `
- q " "
- Pi pi pi
- Ne != !=
- Le <= <=
- Ge >= >=
- Lt < >
- Gt > <
- Pm +- +-
- If infinity infinity
- Na _N_a_N _N_a_N
- Ba | |
-
- NNoottee: The string named `q' should be written as `\*q' since it is only
- one char.
-
- DDIIAAGGNNOOSSTTIICCSS
- The debugging facilities for --mmddoocc are limited, but can help detect sub-
- tle errors such as the collision of an argument name with an internal
- register or macro name. (A what?) A register is an arithmetic storage
- class for troff with a one or two character name. All registers internal
- to --mmddoocc for troff and ditroff are two characters and of the form <up-
- per_case><lower_case> such as `Ar', <lower_case><upper_case> as `aR' or
- <upper or lower letter><digit> as `C1'. And adding to the muddle, troff
- has its own internal registers all of which are either two lower case
- characters or a dot plus a letter or meta-character character. In one of
- the introduction examples, it was shown how to prevent the interpretation
- of a macro name with the escape sequence `\&'. This is sufficient for the
- internal register names also.
-
- If a non-escaped register name is given in the argument list of a request
- unpredictable behavior will occur. In general, any time huge portions of
- text do not appear where expected in the output, or small strings such as
- list tags disappear, chances are there is a misunderstanding about an ar-
- gument type in the argument list. Your mother never intended for you to
- remember this evil stuff - so here is a way to find out whether or not
- your arguments are valid: The `.Db' (debug) macro displays the interpre-
- tation of the argument list for most macros. Macros such as the `.Pp'
- (paragraph) macro do not contain debugging information. All of the
- callable macros do, and it is strongly advised whenever in doubt, turn on
- the `.Db' macro.
-
- Usage: .Db [on | off]
-
- An example of a portion of text with the debug macro placed above and be-
- low an artificially created problem (a flag argument `aC' which should be
- `\&aC' in order to work):
-
- .Db on
- .Op Fl aC Ar file )
- .Db off
-
- The resulting output:
-
- DEBUGGING ON
- DEBUG(argv) MACRO: `.Op' Line #: 2
- Argc: 1 Argv: `Fl' Length: 2
- Space: `' Class: Executable
- Argc: 2 Argv: `aC' Length: 2
- Space: `' Class: Executable
- Argc: 3 Argv: `Ar' Length: 2
- Space: `' Class: Executable
- Argc: 4 Argv: `file' Length: 4
- Space: ` ' Class: String
- Argc: 5 Argv: `)' Length: 1
- Space: ` ' Class: Closing Punctuation or suffix
- MACRO REQUEST: .Op Fl aC Ar file )
- DEBUGGING OFF
-
- The first line of information tells the name of the calling macro, here
- `.Op', and the line number it appears on. If one or more files are in-
- volved (especially if text from another file is included) the line number
- may be bogus. If there is only one file, it should be accurate. The
- second line gives the argument count, the argument (`Fl') and its length.
- If the length of an argument is two characters, the argument is tested to
- see if it is executable (unfortunately, any register which contains a
- non-zero value appears executable). The third line gives the space al-
- lotted for a class, and the class type. The problem here is the argument
- aC should not be executable. The four types of classes are string, exe-
- cutable, closing punctuation and opening punctuation. The last line
- shows the entire argument list as it was read. In this next example, the
- offending `aC' is escaped:
-
- .Db on
- .Em An escaped \&aC
- .Db off
-
- DEBUGGING ON
- DEBUG(fargv) MACRO: `.Em' Line #: 2
- Argc: 1 Argv: `An' Length: 2
- Space: ` ' Class: String
- Argc: 2 Argv: `escaped' Length: 7
- Space: ` ' Class: String
- Argc: 3 Argv: `aC' Length: 2
- Space: ` ' Class: String
- MACRO REQUEST: .Em An escaped &aC
- DEBUGGING OFF
-
- The argument `\&aC' shows up with the same length of 2 as the `\&' se-
- quence produces a zero width, but a register named `\&aC' was not found
- and the type classified as string.
-
- Other diagnostics consist of usage statements and are self explanatory.
-
- GGRROOFFFF,, TTRROOFFFF AANNDD NNRROOFFFF
- The --mmddoocc package does not need compatibility mode with groff.
-
- The package inhibits page breaks, and the headers and footers which nor-
- mally occur at those breaks with nroff, to make the manual more effi-
- cient for viewing on-line. At the moment, groff with --TT_a_s_c_i_i does eject
- the imaginary remainder of the page at end of file. The inhibiting of
- the page breaks makes nroff'd files unsuitable for hardcopy. There is a
- register named `cR' which can be set to zero in the site dependent style
- file _/_u_s_r_/_s_r_c_/_s_h_a_r_e_/_t_m_a_c_/_d_o_c_-_n_r_o_f_f to restore the old style behavior.
-
- FFIILLEESS
- /usr/share/tmac/tmac.doc manual macro package
- /usr/share/man0/template.doc template for writing a man page
-
- SSEEEE AALLSSOO
- mdoc(7), man(1), troff(1)
-
- BBUUGGSS
- Undesirable hyphenation on the dash of a flag argument is not yet re-
- solved, and causes occasional mishaps in the _D_E_S_C_R_I_P_T_I_O_N section. (line
- break on the hyphen).
-
-
- Predefined strings are not declared in documentation.
-
- Section 3f has not been added to the header routines.
-
- `.Nm' font should be changed in _N_A_M_E section.
-
- `.Fn' needs to have a check to prevent splitting up if the line length is
- too short. Occasionally it separates the last parenthesis, and sometimes
- looks ridiculous if a line is in fill mode.
-
- The method used to prevent header and footer page breaks (other than the
- initial header and footer) when using nroff occasionally places an un-
- sightly partially filled line (blank) at the would be bottom of the page.
-
- The list and display macros to not do any keeps and certainly should be
- able to.
-
- BSD Experimental December 30, 1993 23
-